package com.jaj.common;


import java.util.List;

import com.jaj.services.RapGenerateService;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.RootDoc;

public class JavaDocReader {
    private static RootDoc root;
    // 一个简单Doclet,收到 RootDoc对象保存起来供后续使用
    public static  class Doclet {
        public Doclet() {
        }
        public static boolean start(RootDoc root) {
            JavaDocReader.root = root;
            return true;
        }
    }

    /**
     * 获取JavaDoc对象
     * @param path 路径
     */
    public static synchronized RootDoc  read(String path){
        List<String> javaFiles=MyFileUtils.getJavaFileList(path);
        if(javaFiles==null||javaFiles.size()==0){
            return null;
        }
        // http://blog.csdn.net/10km/article/details/78252586
        // 调用com.sun.tools.javadoc.Main执行javadoc,参见 参考资料3
        // javadoc的调用参数，参见 参考资料1
        // -doclet 指定自己的docLet类名
        // -classpath 参数指定 源码文件及依赖库的class位置，不提供也可以执行，但无法获取到完整的注释信息(比如annotation)
        // -encoding 指定源码文件的编码格式
        String[] basicParams= new String[] {
                "-doclet",Doclet.class.getName(),
                "-docletpath", Doclet.class.getResource("/").getPath(),
                "-encoding","utf-8",
                "-classpath", ""
        };
        String[] execParams = new  String[javaFiles.size()+basicParams.length];
        for (int i = 0; i <basicParams.length ; i++) {
            execParams[i]=basicParams[i];
        }
        int length=basicParams.length;
        for (String javaFile : javaFiles) {
            execParams[length++]=javaFile;
        }
        com.sun.tools.javadoc.Main.execute(execParams);
        return root;
    }



    // 显示DocRoot中的基本信息
    public static void show(){
        ClassDoc[] classes = root.classes();
        for (int i = 0; i < classes.length; ++i) {
            ClassDoc classDoc=classes[i];
//            System.out.println(classDoc.name());
//            System.out.println(classDoc.commentText());
//            for(MethodDoc method:classes[i].methods()){
//                MethodDocImpl methodDocImpl =(MethodDocImpl)method;
//                System.err.println(method.commentText());
//                System.err.println(method.getRawCommentText());
//
//
//                if(!method.name().equals("searchApplyOrderListFromES")){
//                    continue;
//                }
//                Tag[] tags= method.tags();
//
//                for (Tag tag : tags) {
//                    if(tag instanceof ParamTag){
////                        ParamTag paramTag=(ParamTag)tag;
////                        System.out.println(paramTag.parameterName()+"-----------"+paramTag.parameterComment());
//                    }
//                    else if(tag.name().equals("@return")){
//                        System.out.println(tag.toString());
//                    }
//
//                }
            //System.out.printf("/t%s/n", method.commentText());
            //}
        }
    }
    
    public static void main(final String ... args) throws Exception{
        String path="D:\\sonlidev\\FeedBackSystem\\master\\witparking-feedback.interfaces\\src\\main\\java\\org\\witparking\\feedback\\interfaces";
        read(path);
        //RapGenerateService.generateRap(root);
        //show();
    }
}